Depolama sağlayıcı
Bir depolama sağlayıcı, dosyaları bir ücret karşılığında depolayan bir hizmettir.
Binaries
Linux/Windows/MacOS ikili dosyaları için storage-daemon
ve storage-daemon-cli
'yi TON Auto Builds adresinden indirebilirsiniz.
Kaynaklardan Derleme
storage-daemon
ve storage-daemon-cli
'yi kaynaklardan derlemek için bu talimatı
kullanabilirsiniz.
Anahtar kavramlar
Bu, depolama taleplerini kabul eden ve müşterilerden ödemeleri yöneten bir akıllı sözleşmeden ve dosyaları müşterilere yükleyip sunan bir uygulamadan oluşur. İşte nasıl çalışır:
- Sağlayıcının sahibi,
storage-daemon
'ı başlatır, ana akıllı sözleşmeyi dağıtır ve parametreleri ayarlar. Sözleşmenin adresi potansiyel müşterilerle paylaşılır. - Müşteri,
storage-daemon
kullanarak dosyalarından bir Bag oluşturur ve sağlayıcının akıllı sözleşmesine özel bir iç mesaj gönderir. - Sağlayıcının akıllı sözleşmesi, bu özel Bag'i işlemek için bir depolama sözleşmesi oluşturur.
- Sağlayıcı, blockchain'de isteği bulduğunda, Bag'i indirir ve depolama sözleşmesini etkinleştirir.
- Müşteri, depolama için ödeme yapabilir. Ödeme almak için sağlayıcı, düzenli olarak sözleşmeye, Bag'i hala depoladıklarına dair kanıt sunar.
- Eğer depolama sözleşmesindeki fonlar tükenirse, sözleşme etkisiz sayılır ve sağlayıcının Bag'i depolamak zorunda değildir. Müşteri ya sözleşmeyi doldurabilir ya da dosyalarını geri alabilir.
Müşteri, depolama sözleşmesine mülkiyet kanıtı sağlayarak dosyalarını dilediği zaman geri alabilir. Sözleşme, ardından dosyaları müşteriye bırakır ve kendini devre dışı bırakır.
Akıllı sözleşme
Müşteriler Tarafından Bir Sağlayıcının Kullanımı
Bir depolama sağlayıcısını kullanmak için, onun akıllı sözleşmesinin adresini bilmeniz gerekir. Müşteri, storage-daemon-cli
aracılığıyla sağlayıcının parametrelerini şu komutla alabilir:
get-provider-params <address>
Sağlayıcının parametreleri:
- Yeni depolama sözleşmelerinin kabul edilip edilmeyeceği.
- Minimum ve maksimum Bag boyutu (bayt cinsinden).
- Oran - depolamanın maliyeti. Megabayt başına günlük nanoTON cinsinden belirtilmiştir.
- Maksimum aralık - sağlayıcının Bag depolaması için kanıt sunması gereken sıklık.
Depolama talebi
Bir Bag oluşturmanız ve aşağıdaki komutla bir mesaj üretmeniz gerekir:
new-contract-message <BagID> <file> --query-id 0 --provider <address>
Bilgi:
Bu komut büyük Bags için biraz zaman alabilir. Mesaj içeriği `'e kaydedilecektir (tüm iç mesaj değil). Sorgu kimliği 0 ile
2^64-1` arasında herhangi bir sayı olabilir. Mesaj, sağlayıcının parametrelerini (oran ve maksimum aralık) içerir. Bu parametreler, komutun icrası sonrası yazdırılacak, dolayısıyla gönderilmeden önce iki kez kontrol edilmelidir. Sağlayıcının sahibi parametreleri değiştirirse, mesaj reddedilir; bu nedenle yeni depolama sözleşmesinin koşulları, müşterinin beklediği gibi olacaktır.
Müşteri, bu içeriğe sahip mesajı sağlayıcının adresine göndermelidir. Hata durumunda mesaj göndericiye geri döner (geri atılır). Aksi takdirde, yeni bir depolama sözleşmesi oluşturulacak ve müşteri, op=0xbf7bd0c1
ile birlikte aynı sorgu kimliği ile bir mesaj alacaktır.
Not: Bu aşamada sözleşme henüz aktif değildir. Sağlayıcı Bag'i indirdiğinde, depolama sözleşmesini aktif hale getirecek ve müşteri,
op=0xd4caedcd
(aynı zamanda depolama sözleşmesinden) ile bir mesaj alacaktır.
Depolama sözleşmesinin bir "müşteri bakiyesi" vardır - bunlar, müşteri tarafından sözleşmeye transfer edilen ve henüz sağlayıcıya ödenmemiş fonlardır. Fonlar, bu bakiyeden kademeli olarak tahsil edilir (megabayt başına gün başına oran kadar bir hızla). Başlangıçta bakiye, müşterinin depolama sözleşmesini oluşturma talebiyle transfer ettiği tutardır. Müşteri daha sonra, depolama sözleşmesine basit transferler yaparak bakiyesini artırabilir (bu, herhangi bir adresten yapılabilir). Kalan müşteri bakiyesi, get_storage_contract_data
get metodu ile ikinci değer (balance
) olarak döndürülür.
Sözleşme aşağıdaki durumlarda kapatılabilir:
Depolama sözleşmesi kapatıldığında, müşteri kalan bakiyesi ile birlikte op=0xb6236d63
ile bir mesaj alır.
- Oluşturulduktan hemen sonra, aktivasyon öncesinde, eğer sağlayıcı sözleşmeyi kabul etmeyi reddederse (sağlayıcının limiti aşıldıysa veya diğer hatalar varsa).
- Müşteri bakiyesi 0'a ulaşırsa.
- Sağlayıcı, sözleşmeyi isteğe bağlı olarak kapatabilir.
- Müşteri, kendi adresinden ve herhangi bir sorgu kimliği ile
op=0x79f937ea
ile bir mesaj göndererek isteğe bağlı olarak sözleşmeyi kapatabilir.
Sağlayıcıyı Çalıştırma ve Yapılandırma
Depolama Sağlayıcı, storage-daemon
'ın bir parçasıdır ve storage-daemon-cli
ile yönetilir. storage-daemon
'ın -P
bayrağı ile başlatılması gerekir.
Ana akıllı sözleşmeyi oluşturma
Bunu storage-daemon-cli
üzerinden yapabilirsiniz:
deploy-provider
Sağlayıcıyı başlatmak için belirtilen adrese 1 TON göndermenizi talep edecek bir geri dönmeyen mesaj göndermeniz gerekecek. Sözleşmenin oluşturulup oluşturulmadığını get-provider-info
komutunu kullanarak kontrol edebilirsiniz.
Varsayılan olarak, sözleşme yeni depolama sözleşmelerini kabul etmek üzere ayarlanmamıştır. Aktivasyondan önce sağlayıcıyı yapılandırmanız gerekir. Sağlayıcının ayarları, storage-daemon
'da depolanan bir yapılandırma ve blockchain'de saklanan sözleşme parametrelerinden oluşur.
Yapılandırma:
max contracts
- aynı anda var olabilecek maksimum depolama sözleşmesi sayısı.max total size
- depolama sözleşmelerindeki toplam Bag boyutu için maksimum.
Yapılandırma değerlerini get-provider-info
kullanarak görüntüleyebilir ve bunları aşağıdaki komutla değiştirebilirsiniz:
set-provider-config --max-contracts 100 --max-total-size 100000000000
Sözleşme parametreleri:
accept
- yeni depolama sözleşmelerini kabul etme durumu.max file size
,min file size
- bir Bag için boyut limitleri.rate
- depolama maliyeti (megabayt başına günlük nanoTON cinsinden belirtilmiştir).max span
- sağlayıcının ne sıklıkta depolama kanıtı sunması gerektiği.
Parametreleri get-provider-info
ile görebilir ve aşağıdaki komutla değiştirebilirsiniz:
set-provider-params --accept 1 --rate 1000000000 --max-span 86400 --min-file-size 1024 --max-file-size 1000000000
Dikkat edilmesi gerekenler
Not: set-provider-params
komutunda yalnızca bazı parametreleri belirleyebilirsiniz. Diğerleri mevcut parametrelerden alınacaktır. Blockchain'deki veriler anında güncellenmediğinden, ardışık set-provider-params
komutları beklenmedik sonuçlar doğurabilir.
Başlangıçta sağlayıcının bakiyesine 1 TON'dan fazla koymak önerilir, böylece depolama sözleşmeleri ile çalışmak için komisyonları karşılayacak yeterli fon bulunur. Ancak, ilk geri dönmeyen mesajla çok fazla TON göndermeyin.
accept
parametresini 1
olarak ayarladıktan sonra, akıllı sözleşme, müşterilerden talepleri kabul etmeye ve depolama sözleşmeleri oluşturmaya başlayacak; depolama daemon'ı bunları otomatik olarak işleyerek Bag'leri indirecek ve dağıtacaktır.
Sağlayıcı ile İlgili Daha Fazla Çalışma
Mevcut depolama sözleşmeleri listesi
get-provider-info --contracts --balances
Her depolama sözleşmesinin bir Client$
ve Contract$
bakiyesi vardır; bunlar arasındaki fark, withdraw
komutuyla ana sağlayıcı sözleşmesine çekilebilir.
withdraw-all
komutu, en az 1 TON
mevcut olan tüm sözleşmelerden fonları çeker.
Herhangi bir depolama sözleşmesi, close-contract
komutuyla kapatılabilir. Bu, aynı zamanda fonları ana sözleşmeye de aktarır. Müşterinin bakiyesi tükendiğinde, aynı şey otomatik olarak gerçekleşir. Bu durumda Bag dosyaları silinecektir (eğer aynı Bag'i kullanan başka sözleşmeler yoksa).
Transfer
Fonları ana akıllı sözleşmeden herhangi bir adrese transfer edebilirsiniz (tutar nanoTON cinsinden belirtilmiştir):
send-coins <address> <amount>
send-coins <address> <amount> --message "Bir mesaj"
Sağlayıcı tarafından depolanan tüm Bag'ler list
komutu ile mevcut olup, normal şekilde kullanılabilir. Sağlayıcının işlemlerini kesintiye uğratmamak için bunları silmeyin veya bu depolama daemon'ı başka Bag'lerle çalışmak için kullanmayın.